add a new Key-Val pair
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
character(len=*), | intent(in) | :: | aInLine | |||
type(IniList), | intent(out) | :: | iniDB |
Type | Visibility | Attributes | Name | Initial | |||
---|---|---|---|---|---|---|---|
integer(kind=long), | public | :: | commentPos | ||||
integer(kind=long), | public | :: | eqPos | ||||
character(len=stringLen), | public | :: | inLine | ||||
integer(kind=long), | public | :: | lastPos | ||||
character(len=stringLen), | public | :: | s |
SUBROUTINE IniAddLine & ! ( aInLine, iniDB ) IMPLICIT NONE ! subroutine arguments ! Scalar arguments with intent(in): CHARACTER (LEN=*), INTENT(in) :: aInLine ! Array arguments with intent(out): TYPE (IniList), INTENT(OUT) :: iniDB !Local scalar: INTEGER (KIND = long) :: eqPos, commentPos, lastPos CHARACTER (LEN = stringLen ) :: s, inLine !------------end of declaration------------------------------------------------ !change tabs to spaces inLine = TabToSpace (aInLine) !remove trailing spaces inLine = TRIM ( ADJUSTL ( InLine ) ) !search for section or subsection IF ( inLine(1:1) == '[' .AND. inLine(2:2) /= '[' ) THEN IF (inSection) THEN iniDB % sectionEnd(iniDB % nOfSections) = numKeys inSection = .TRUE. ENDIF IF (inSubSection) THEN iniDB % subSectionEnd(iniDB % nOfSubSections) = numKeys inSubSection = .FALSE. ENDIF inSection = .TRUE. iniDB % nOfSections = iniDB % nOfSections + 1 iniDB % sectionName(iniDB % nOfSections) = & inLine (2 : SCAN (inLine, ']') - 1) iniDB % sectionBegin(iniDB % nOfSections) = numKeys + 1 ENDIF IF ( inLine(1:2) == '[[' ) THEN IF (inSubSection) THEN iniDB % subSectionEnd(iniDB % nOfSubSections) = numKeys inSubSection = .FALSE. ENDIF inSubSection = .TRUE. iniDB % nOfSubSections = iniDB % nOfSubSections + 1 iniDB % subSectionName(iniDB % nOfSubSections) = & inLine (3 : SCAN (inLine, ']') - 1) iniDB % subSectionBegin(iniDB % nOfSubSections) = numKeys + 1 ENDIF commentPos = SCAN(inLine,'#') IF (commentPos /= 0) THEN inLine = inLine (1 : commentPos - 1) END IF eqPos = SCAN ( inLine , '=' ) IF ( eqPos /= 0 .AND. inLine(1:1) /= '#' ) THEN numKeys = numKeys + 1 iniDB % keys(numKeys) = TRIM(inLine(1 : eqPos - 1)) s = ADJUSTL(inLine(eqPos + 1:)) commentPos = SCAN(s,'#') IF (commentPos /= 0) THEN s = s (1 : commentPos - 1) END IF lastPos = LEN_TRIM(s) IF (lastPos > 1) THEN IF ( s ( 1 : 1 ) == '''' .AND. s ( lastPos : lastPos ) == '''') THEN s = s ( 2 : lastPos - 1 ) END IF END IF iniDB % vals(numKeys) = TRIM(s) END IF END SUBROUTINE IniAddLine